package com.atguigu.patterns.command;


import java.util.HashMap;
import java.util.Map;

public class RemoteController {

	// 开 按钮的命令数组
	Map<Integer, Command> onCommands;
	Map<Integer, Command> offCommands;

	// 执行撤销的命令
	Command undoCommand;

	// 构造器，完成对按钮初始化

	public RemoteController() {

		onCommands = new HashMap<>(5);
		offCommands = new HashMap<>(5);

	}

	// 给我们的按钮设置你需要的命令
	public void setCommand(int no, Command onCommand, Command offCommand) {
		onCommands.put(no, onCommand);
		offCommands.put(no, offCommand);
	}

	// 按下开按钮
	public void onButtonWasPushed(int no) { // no 0
		// 找到你按下的开的按钮， 并调用对应方法
		onCommands.get(no).execute();
		// 记录这次的操作，用于撤销
		undoCommand = onCommands.get(no);

	}

	// 按下开按钮
	public void offButtonWasPushed(int no) { // no 0
		// 找到你按下的关的按钮， 并调用对应方法
		onCommands.get(no).execute();
		// 记录这次的操作，用于撤销
		undoCommand = onCommands.get(no);

	}
	
	// 按下撤销按钮
	public void undoButtonWasPushed() {
		undoCommand.undo();
	}

}
